package com.example.chamberlainserver.Service;

import com.example.chamberlainserver.Vo.Request.Dashboard.DashboardQuery;
import com.example.chamberlainserver.Vo.Response.Dashboard.DashboardDTO;

import java.util.List;

/**
 * 数据大屏服务接口
 */
public interface DashboardService {
    
    /**
     * 获取系统概览数据
     * @return 系统概览数据
     */
    DashboardDTO.SystemOverview getSystemOverview();
    
    /**
     * 获取物资库存概况
     * @return 物资库存概况
     */
    DashboardDTO.MaterialOverview getMaterialOverview();
    
    /**
     * 获取用户活跃度数据
     * @param period 统计周期
     * @return 用户活跃度数据
     */
    DashboardDTO.UserActivity getUserActivity(String period);
    
    /**
     * 获取物资分类占比
     * @return 物资分类占比列表
     */
    List<DashboardDTO.CategoryRatio> getCategoryRatio();
    

    
    /**
     * 获取物资使用频率排行
     * @param query 查询参数
     * @return 物资使用频率排行列表
     */
    List<DashboardDTO.MaterialUsage> getMaterialUsageRanking(DashboardQuery query);
    
    /**
     * 获取库存预警物资
     * @param limit 返回记录数量限制
     * @return 库存预警物资列表
     */
    List<DashboardDTO.LowStockMaterial> getLowStockMaterials(Integer limit);
    
    /**
     * 获取跳闸记录统计
     * @param period 统计周期
     * @return 跳闸记录统计数据
     */
    DashboardDTO.TrippingStats getTrippingStats(String period);
    
    /**
     * 获取跳闸功率分布
     * @return 跳闸功率分布列表
     */
    List<DashboardDTO.PowerDistribution> getPowerDistribution();
    
    /**
     * 获取跳闸时间分布
     * @param query 查询参数
     * @return 跳闸时间分布数据
     */
    DashboardDTO.TimeDistribution getTimeDistribution(DashboardQuery query);
    
    /**
     * 获取班级跳闸排行
     * @param query 查询参数
     * @return 班级跳闸排行列表
     */
    List<DashboardDTO.ClassRanking> getClassRanking(DashboardQuery query);
    
    /**
     * 获取用户登录统计
     * @param period 统计周期
     * @return 用户登录统计数据
     */
    DashboardDTO.LoginStats getLoginStats(String period);
    
    /**
     * 获取用户操作分布
     * @param period 统计周期
     * @return 用户操作分布列表
     */
    List<DashboardDTO.OperationDistribution> getOperationDistribution(String period);
    
    /**
     * 获取物资库存趋势数据
     * @param period 统计周期（daily, weekly, monthly）
     * @param days 统计天数（默认30天）
     * @return 物资库存趋势数据
     */
    DashboardDTO.MaterialStockTrend getMaterialStockTrend(String period, Integer days);
    
    /**
     * 获取指定物资的库存趋势详情
     * @param materialId 物资ID
     * @param period 统计周期
     * @param days 统计天数
     * @return 物资库存趋势详情
     */
    DashboardDTO.MaterialStockTrendDetail getMaterialStockTrendDetail(Long materialId, String period, Integer days);
}